package cn.ac.zing.server.util;

import org.apache.commons.lang3.StringUtils;

import java.io.*;
import java.util.HashSet;
import java.util.Set;

/**
 * @description:
 * @author: dcy
 * @create: 2023-09-02 13:46
 */
public class FileUtil {

    public static String read(File file) throws Exception {
        StringBuilder content = new StringBuilder();
        int num = 0;
        char[] buf = new char[1024];
        FileReader fr = new FileReader(file);
        while ((num = fr.read(buf)) != -1) {
            content.append(new String(buf, 0, num));
        }
        fr.close();
        return content.toString();
    }

    public static String getFileContent(Object obj) throws Exception {
        if (null == obj) {
            return null;
        }
        BufferedReader reader = null;
        // 如果是文件路径
        if (obj instanceof String) {
            reader = new BufferedReader(new FileReader(new File((String) obj)));
            // 如果是文件输入流
        } else if (obj instanceof InputStream) {
            reader = new BufferedReader(new InputStreamReader((InputStream) obj));
        }
        String line = null;
        StringBuilder content = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            content.append(line);
        }
        reader.close();
        return content.toString();
    }

    public static String getFileName(String path) {
        if (StringUtils.isBlank(path)) {
            return "";
        }
        // 使用字符串操作方法提取文件名
        int lastSeparatorIndex = path.lastIndexOf(System.getProperty("file.separator"));
        return path.substring(lastSeparatorIndex + 1);

    }

    public static boolean moveFile(String source, String target) {
        File sourceFile = new File(source);
        // 获取目录
        String directory = target.substring(0, target.lastIndexOf('/'));
        if(StringUtils.isBlank(directory)) { // 没有目标路径, 说明该文件不需要保存
            return sourceFile.delete();
        }
        File targetFile = new File(target);

        // 检查源文件是否存在
        if (!sourceFile.exists()) {
            System.out.println("源文件不存在");
            return false;
        }

        // 如果目标文件存在，先删除它
        if (targetFile.exists()) {
            targetFile.delete();
        }

        return sourceFile.renameTo(targetFile);
    }
    public static void mkdir(String path) {
        File file = new File(path);
        if (!file.exists()) {
            file.mkdirs();
        }
    }

    public static Set<String> getFileNames(String dir) {

        File directory = new File(dir);
        // 获取目录中所有的文件和子目录
        File[] files = directory.listFiles();
        // 创建Set集合来存储文件名
        Set<String> fileNames = new HashSet<>();

        // 遍历文件数组，将每个文件的名称添加到Set集合中
        for (File file : files) {
            if (file.isFile()) {
                fileNames.add(file.getName());
            }
        }
        return fileNames;
    }


}


